¿Qué es el software libre?

“Free software as in free speech, not free beer”

por Antonio Gallego de Torres, autor del libro "Enrutadores Cisco".

Otros Artículos y Posts

Transmisión de datos a 16.4 Tbps - ¿Qué es RSS? Cómo suscribirse a esta página. - Primero fue el WiFi, ahora viene el GiFi... - Ya sólo les quedaba montar en globo... - La comunicaciones móviles GSM no son (nada) segura... - La RAM no era tan volátil... - Feria SITI/asLAN 26-28 Febrero @ IFEMA, Madrid - ¿Huawei abandona la compra de 3Com? - Scopetris: Tetris en un Osciloscopio - Madrid acoge el primer Foro de Internet - Múltiples Notificaciones de Seguridad de Cisco, Ch... - Yahoo! rechaza la oferta inicial de Microsoft - Arranca GSMA Mobile Congress World 2008 @ Barcelon... - Cortes en cables submarinos causan estragos en Int... - Certificaciones Cisco CCNA y CCENT - Visión Artificial con Nokia S60 y Python - Microsoft quiere comprar Yahoo! - Uso de la órden Ping en redes Cisco - Uso de listas de acceso (ACLs) en entornos Cisco - Uso de NAT en redes Cisco - ¿Qué es un router? - ¿Qué es el software libre/open source? - ¿Qué diferencia hay entre un router, un hub y un switch? - Super Switch Cisco Nexus 7000 y NX-OS 4.0 - Python & Nokia: Gráficos OpenGL ES 3D - Servidor Web para móviles Nokia Symbiam - Banda Ancha - Wimax 802.16 y Docsis 3.02 - Cisco presenta certificación de diseño experto CCDE - Las 100 mejores empresas de Estados Unidos - Conferencia de Seguridad FIST @ CSIC, Madrid - Cisco Publica Informe de Seguridad 2007 - Sun compra MySQL, Oracle compra BEA - CES 2008 - ¿787 Hack? - nCipher compra NeoScale - El lenguaje de programación Python - 9600/8-N-1-N - Conexión a Cisco por consola - Nuevas cualificaciones profesionales - Lecturas Recomendadas sobre Cisco


¿Qué es el Software Libre? (Open/Free Software)
El software libre o abierto son programas de ordenador que se distribuyen libremente. Esto significa (1) que las instrucciones que componen el programa (el código fuente) están disponibles para su estudio y cambio y (2) que son gratuitos (al menos en los términos generales que matizaremos después).

(1) el código fuente del programa está disponible para su estudio y manipulación: Se puede cambiar el programa y volver a distribuirlo, siempre que al ponerlo de nuevo en circulación se haga en las mismas condiciones de gratituidad y libre disposición del código fuente en las que se encontraba antes (en definitiva, que siga siendo software libre). Esto se traduce en que programadores de todo el mundo pueden estudiar los programas, corregir errores, añadir funciones a los mismos o adaptarlos para resolver nuevos problemas.

(2) son gratuitos: el software abierto/libre se puede conseguir (al menos en su forma de código 'fuente') de forma gratuita, pagando sólo los gastos del soporte en el que se entrega, como por ejemplo un CD, o bajándolo directamente de Internet. En términos generales las licencias de distribución de software libre (por ejemplo la licencia GNU/GPL) no obligan a distribuir el programa gratis, pero permiten que cualquiera pueda hacerlo al precio que le venga en gana. Esto se traduce en que al final sólo se cobran los soportes, los costes de distribución

Vemos a continuación qué son los programas y sus distintas presentaciones (código fuente, binarios) para terminar explicando la diferencia fundamental entre software abierto y software cerrado.

¿Qué son los programas de ordenador?
Son las instrucciones que permiten al ordenador realizar una función. Un ordenador es una máquina que sigue una lista de instrucciones y realiza una tarea. Para comunicarse con el exterior tiene instrucciones que toman información (del teclado, ratón, discos...) y otras que le permiten sacar información (a una impresora, a una pantalla, a unos altavoces, a otro ordenador...). Típicamente un programa de ordenador toma una serie de datos (con las instrucciones de entrada), procesa la información (con instrucciones u operadores lógicos y aritméticos) y manda el resultado (con las instrucciones de salida) a un dispositivo donde podemos percibir el resultado.

Los ordenadores representan internamente toda la información (tanto la de los programas como la de los datos que los programas manipulan) usando dos estados: unos y ceros. Cómo son máquinas electrónicas, representan los ceros y unos con un voltaje (por ejemplo en tecnología TTL un cero son cero voltios y un uno son 5 voltios). Lo que a nosotros nos interesa es que internamente representan los programas y los datos como tiras de unos y ceros, de forma que la memoria de un ordenador puede presentar un aspecto similar al siguiente:

101001010101011011110101001010110101100101010100 010101001010100010101000010111010101010101010100 101010110100101101001010111010101101001010101011 etc...

Recuerda: el ordenador es una máquina, de forma que los unos y ceros estarán representados por campos magnéticos (memorias, discos), voltajes (señales viajando entre componentes), etc... Los componentes del ordenador van leyendo esas tiras de unos y ceros, las agrupan y las van interpretando. Programar ordenadores introduciendo unos y ceros es una tarea extremadamente compleja, propensa a errores y muy poco productiva. Uno de los primeros programas de ordenador que los ingenieros escribieron fue el ensamblador/desensamblador, un programa que realiza una traducción literal de los códigos de las instrucciones básicas del ordenador (el lenguaje ensamblador) en las tiras de unos y ceros que el ordenador entiende (el lenguaje máquina). El aspecto de un programa en ensamblador es el siguiente:
 

DIRECCION
DE MEMORIA

0C5A:010A
0C5A:010D
0C5A:010F
0C5A:0111
0C5A:0113
0C5A:0117
0C5A:0119
0C5A:011A
0C5A:011B
0C5A:011E
0C5A:011F
CONTENIDO EN Base16
(HEXADECIMAL)

E8FCCC
740A
3C0D
7406
3A06D59A
75F0
4E
C3
BF3400
49
0CFE
INSTRUCCIONES
y PARAMETROS

CALL CE09
JZ 0119
CMP AL,0D
JZ 0119
CMP AL,[9AD5]
JNZ 0109
DEC SI
RET
MOV DI,0034
DEC CX
OR AL,FE


El programa en código máquina aparece representado en la segunda columna, sólo que en vez de en binario (unos y ceros) en hexadecimal (base 16), para que ocupe menos espacio. El programa equivalente escrito en forma simbólica, no numérica, viene en la tercera columna. Hay una correspondencia directa entre ambas columnas. El programa ensamblador traduce la tercera columna en la segunda, y el desensamblador convierte la segunda columna en la tercera. La primera columna representa la posición de la memoria donde se almacena la información (el programa y los datos). Aun así, los programas en ensamblador siguen siendo muy difíciles de escribir, dependen de la máquina y una vez escritos, de entender. El siguiente paso fue desarrollar traductores mas sofisticados, que tomaran un fichero escrito en un lenguaje más similar al natural, en el que expresar ideas más complejas (ideas lógicas y matemáticas). Los primeros lenguajes 'de alto nivel' fueron el Fortran y el LISP. Lenguajes modernos son el Java, el C/C++, SQL, Perl y Python. Hay cientos de lenguajes. El aspecto de un programa escrito en Perl es el siguiente

#!/usr/bin/perl -w
for ($i=0 ; $i<=100 ;$i++) {
    print $i,"\t",cuad($i),"\t",fact($i),"\n";
}

sub cuad {
    return $_[0]*$_[0];
}

sub fact {
    if ($_[0]<=1) {
         return 1;
    } else {
        return $_[0]*fact($_[0]-1);
    }
}


Un programa especial (denominado compilador o intérprete) traduce estos bloques de código 'de alto nivel' (el código fuente) en las tiras de unos y ceros que el ordenador entiende (el código máquina o los binarios). El programador puede concentrarse en pensar en la función del programa (pensar en el diseño, los algoritmos, la lógica del programa), codificar el programa en un lenguaje de alto nivel (como el Java o el perl) y dejar que el ordenador traduzca sus ideas en programas binarios que producen resultados reales (que hacen que la circuitería del ordenador trabaje). De esta forma un programa escrito en este tipo de lenguaje es más fácil de portar a otras máquinas.

Es importante comprender que la operación contraria (generar a partir de un fichero binario el código fuente) es muy difícil de realizar, y prácticamente imposible de automatizar (es lo que en matemáticas se denomina 'funciones de una sólo vía'). Hay gente muy lista que es capaz de examinar sistemas complejos (como un motor, o un programa escrito en lenguaje máquina) y deducir cómo funcionan y cómo han sido diseñados y fabricados. A este proceso se le denomina 'ingeniería inversa'. Pero es un proceso muy laborioso, bastante artesanal, que exige mucha pericia y que es casi imposible de mecanizar.

Ahora podemos entender la diferencia entre código abierto y cerrado: un programa cerrado se distribuye en forma binaria (un archivo de unos y ceros). En general no se permite cambiarlo, ni redistribuirlo, se dan pocos detalles de su funcionamiento interno, en muchos casos se prohíbe explícitamente la ingeniería inversa sobre el producto y si construimos otros sistemas que dependan de un producto cerrado corremos el riesgo de que el fabricante cambie en un futuro (a veces adrede) los detalles internos de funcionamiento y que deje nuestros productos inservibles (por haber sido construidos sobre su sistema y depender de su estructura interna). Esto es especialmente grave cuando afecta al sistema operativo, el programa básico que hace que un ordenador arranque y espere nuestras instrucciones. Si uno quiere escribir programas para un sistema operativo cerrado debe 'pasar por el aro' del fabricante, usar las herramientas que este le proporciona, de la forma que este le dice. Los servicios que un sistema operativo cerrado proporciona están disponibles para el fabricante antes que para el resto de la comunidad de programadores de aplicaciones, con la ventaja competitiva que esto supone.

En cambio el software libre se distribuye tanto en forma binaria (para que podamos empezar a usarlo inmediatamente) como en su forma lógica (el código fuente), de forma que podemos estudiar el programa, modificarlo (si nos interesa o nos atrevemos), compilar nosotros mismos el código y generar un fichero binario de nuestra confianza. Además, al conocer la estructura interna podemos diseñar sistemas que se integren perfectamente con el software libre.

¿Qué es GNU/Linux?
Es un clon de UNIX (un sistema operativo) que a principios de los 90 un estudiante Finlandés llamado Linus Torvalds empezó a escribir como parte de su proyecto de fin de carrera. Hizo algo muy notable: a medida que lo iba escribiendo lo 'colgaba' de Internet. Rápidamente empezó a coordinar a decenas de calaboradores desinteresados de todo el mundo. Para simplificar lo llamaremos Linux. Ahora Linux es el ejemplo más notable de Software libre, pero hay muchos otros proyectos cuya filosofía es similar.

Actualmente Linus Torvalds sigue siendo el arquitecto principal de Linux, vive en California, USA, y hasta hace poco trabajaba en la empresa de microchips Transmeta. De aspecto tiene un aire a Bill Gates. El parecido se queda ahí. El principal mantenedor junto con Torvalds de la parte crítica de Linux, (el núcleo o kernel) es un brasileño de 19 años, Marcelo Tossati. El anterior en su puesto fue el galés Alan Cox. Otros ilustres contribuyentes al Open Source son Richard Stallman, el mexicano Miguel de Icaza (Gnome), Donald Becker (que trabaja en la NASA y en sus ratos libres escribió los módulos de red Ethernet y ahora desarrolla los sistemas paralelos denominados Beowulf), y cientos de programadores más.

Otros ejemplos de software libre: Sistema operativos (GNU/HURD, Linux, FreeBSD...), programas de diseño (GIMP), Servidores de Internet (Apache), Servidores de Correo (Sendmail), Bases de datos (MySQL), Herramientas para programar en la mayoría de los lenguajes de programación (compiladores, intérpretes, enlazadores, ensambladores), toda clase de herramientas de seguridad y telecomunicaciones (nmap, ethereal, tcpdump, whisker...), entornos de ventanas tipo windows (Gnome, KDE, Windows Maker…), etc... etc...

PARA PROBAR LINUX: Hay muchas distribuciones (Red Hat, Mandrake, Debian, SuSe, Linex), pero todas se basan en el kernel de Linux. Una de las distribuciones más sencillas para empezar es la Knoppix, (metes un CD en el PC, lo reinicias y automáticamente carga el Linux, con la ventaja de que al final apagas el ordenador y queda todo como estaba).

PARA EMPEZAR A PROGRAMAR: Python es un magnífico lenguaje para empezar. Linux está escrito básicamente en C. Tienes dos libros muy buenos en español sobre Python y C en esta página.

PREGUNTAS FRECUENTES
¿Qué significa GNU? Es el acrónimo recursivo de “GNU No es Unix”
¿Quién manda en el mundo del Software Libre? Nadie.
¿Quién organiza un proyecto de Software Libre? Buenos técnicos, 'elegidos' por su prestigio, que además son buenos gestores. Lo hacen en sus ratos libres (en sus otros ratos algunos trabajan en sitios como la NASA).
¿Por qué no lo venden y se hacen ricos? No lo hacen por dinero, sino por el prestigio de la comunidad 'hacker'. Además, por dinero es imposible competir con las grandes empresas (la llamada barrera de entrada)
¿Cómo se hace dinero? Los programadores de sistemas como Linux encuentran trabajo en todos lados.
¿Cómo se hace más dinero? Hay empresas que venden servicios alrededor del software libre (cobran por instalarlo, enseñar a usarlo, mantenerlo, ampliarlo, adaptarlo...). Empresas como IBM están haciendo muy buen negocio prestando servicios sobre Linux.
¿Ahora que han tenido éxito, no pueden cambiar de idea y cerrar los sistemas? No hay marcha atrás, la licencia es muy clara.
¿Y si los programadores se cansan de regalar su esfuerzo? No parece que vaya a ocurrir. Además, vendrían otros. Quizás tú.
 

Otros artículos y posts

Transmisión de datos a 16.4 Tbps - ¿Qué es RSS? Cómo suscribirse a esta página. - Primero fue el WiFi, ahora viene el GiFi... - Ya sólo les quedaba montar en globo... - La comunicaciones móviles GSM no son (nada) segura... - La RAM no era tan volátil... - Feria SITI/asLAN 26-28 Febrero @ IFEMA, Madrid - ¿Huawei abandona la compra de 3Com? - Scopetris: Tetris en un Osciloscopio - Madrid acoge el primer Foro de Internet - Múltiples Notificaciones de Seguridad de Cisco, Ch... - Yahoo! rechaza la oferta inicial de Microsoft - Arranca GSMA Mobile Congress World 2008 @ Barcelon... - Cortes en cables submarinos causan estragos en Int... - Certificaciones Cisco CCNA y CCENT - Visión Artificial con Nokia S60 y Python - Microsoft quiere comprar Yahoo! - Uso de la órden Ping en redes Cisco - Uso de listas de acceso (ACLs) en entornos Cisco - Uso de NAT en redes Cisco - ¿Qué es un router? - ¿Qué es el software libre/open source? - ¿Qué diferencia hay entre un router, un hub y un switch? - Super Switch Cisco Nexus 7000 y NX-OS 4.0 - Python & Nokia: Gráficos OpenGL ES 3D - Servidor Web para móviles Nokia Symbiam - Banda Ancha - Wimax 802.16 y Docsis 3.02 - Cisco presenta certificación de diseño experto CCDE - Las 100 mejores empresas de Estados Unidos - Conferencia de Seguridad FIST @ CSIC, Madrid - Cisco Publica Informe de Seguridad 2007 - Sun compra MySQL, Oracle compra BEA - CES 2008 - ¿787 Hack? - nCipher compra NeoScale - El lenguaje de programación Python - 9600/8-N-1-N - Conexión a Cisco por consola - Nuevas cualificaciones profesionales - Lecturas Recomendadas sobre Cisco


E-mail: redesyseguridad[ARROBA]gmail[PUNTO]com-- First Edition: Feb 15th, 2004  -- Last modified: Feb 18th, 2004